package com.huatai.saas.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huatai.common.config.MinioAPI;
import com.huatai.common.error.exception.ServiceException;
import com.huatai.common.util.BeanUtil;
import com.huatai.common.util.PaginationUtils;
import com.huatai.saas.dto.BaseDto;
import com.huatai.saas.dto.ClientVersionInfoDto;
import com.huatai.saas.dto.UpdateClientVersionDto;
import com.huatai.saas.entity.ClientVersionEntity;
import com.huatai.saas.mapper.ClientVersionMapper;
import com.huatai.saas.service.ClientVersionService;
import com.huatai.saas.vo.AnnouncementVO;
import com.huatai.saas.vo.ClientVersionVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * @program: nanming-saas
 * @description: 客户端版本服务层
 * @author: zcw
 * @create: 2024-04-17 16:00
 */
@Service
public class ClientVersionServiceImpl extends ServiceImpl<ClientVersionMapper, ClientVersionEntity> implements ClientVersionService {

	/**
	 * 上传客户端版本信息
	 * @param clientVersionInfo 客户端软件版本相关信息
	 * @return
	 */
	@Override
	public boolean uploadClient(ClientVersionInfoDto clientVersionInfo) {
		ClientVersionEntity clientVersion = new ClientVersionEntity();
		// 上传之前先检查对应版本的下载链接是否存在
		String URL = baseMapper.getUrlByVersionNumber(clientVersionInfo.getVersionNumber());
		if(URL != null){
			throw new ServiceException("该版本的客户端已存在，请检查版本号是否输入正确！");
		}
		//将clientVersionInfo转为clientVersion
		BeanUtil.copyProperties(clientVersionInfo, clientVersion);
		int row = baseMapper.insert(clientVersion);
		//如果影响的行数不为1，则添加失败
		if(row != 1){
			throw new ServiceException("添加客户端软件版本异常");
		}
		return true;
	}

	/**
	 * 查询所有的客户端版本列表
	 * @param baseDto 分页信息
	 * @return
	 */
	@Override
	public IPage<ClientVersionVO> listClientVersion(BaseDto baseDto) {
		// 设置分页信息
		Page<ClientVersionVO> page = PaginationUtils.getPage(
			// 获取页码
			baseDto.getPage(),
			// 每页显示条数
			baseDto.getSize()
		);
		IPage<ClientVersionVO> clientVersion = baseMapper.listClientVersion(page);
		return clientVersion;
	}

	/**
	 * 删除客户端版本
	 * @param id 客户端版本id
	 * @return
	 */
	@Override
	public boolean delClientVersion(Long id) {
		//查询该id的客户端版本是否还存在
		ClientVersionEntity clientVersion = baseMapper.selectById(id);
		//如果为null，说明不存在，不支持删除
		if(clientVersion == null){
			throw new ServiceException("该客户端版本已不存在，删除失败！");
		}
		//如果存在，则开始删除操作
		int row = baseMapper.deleteById(id);
		//如果删除的行数不为1，说明删除失败，不能删除
		if(row != 1){
			throw new ServiceException("删除客户端版本异常！");
		}
		return true;
	}

	/**
	 * 根据对应的版本号获取下载链接
	 * @param versionNumber 版本号
	 * @return
	 */
	@Override
	public String getUrl(String versionNumber) {
		return baseMapper.getUrlByVersionNumber(versionNumber);
	}

	@Override
	public boolean updateClientVersionInfo(UpdateClientVersionDto updateClientVersionDto) {
		// 判断需要修改的客户端软件信息是否还存在
		ClientVersionEntity clientVersion = baseMapper.selectById(updateClientVersionDto.getId());
		if(clientVersion == null){
			throw new ServiceException("要修改的客户端软件已不存在！");
		}
		// 判断修改客户端软件版本是否已经存在
		String URL = baseMapper.getUrlByVersionNumber(updateClientVersionDto.getVersionNumber());
		if(URL != null && !clientVersion.getVersionNumber().equals(updateClientVersionDto.getVersionNumber())){
			throw new ServiceException("该版本的客户端已存在，请检查版本号是否输入正确！");
		}
		BeanUtil.copyProperties(updateClientVersionDto, clientVersion);
		// 执行修改操作
		int row = baseMapper.updateById(clientVersion);
		if(row != 1){
			throw new ServiceException("修改客户端软件信息失败！");
		}
		return true;
	}

}
